import { getUserAgents, saveUserAgent, updateUserAgent, deleteUserAgent, getUserFavoriteAgentIds, addAgentToFavorites, removeAgentFromFavorites } from '../db.js';

// 获取用户所有自定义智能体
const getUserAgentList = async (req, res) => {
  try {
    const userId = req.user.id; // 从认证中间件中获取
    
    const agents = await getUserAgents(userId);
    
    // 获取用户收藏的智能体ID列表
    const favoriteIds = await getUserFavoriteAgentIds(userId);
    
    // 为智能体添加收藏标记
    const agentsWithFavorite = agents.map(agent => ({
      ...agent,
      isFavorite: favoriteIds.includes(agent.id)
    }));
    
    res.json({
      message: '获取智能体列表成功',
      data: agentsWithFavorite
    });
  } catch (error) {
    console.error('获取智能体列表失败:', error);
    res.status(500).json({ message: '服务器错误，请稍后再试' });
  }
};

// 创建新的自定义智能体
const createUserAgent = async (req, res) => {
  try {
    const userId = req.user.id; // 从认证中间件中获取
    const { id, name, description, systemPrompt, icon, color, tags, category } = req.body;
    
    if (!name || !systemPrompt) {
      return res.status(400).json({ message: '名称和提示语不能为空' });
    }
    
    // 准备智能体数据
    const agent = {
      id: id || `custom-${Date.now()}`,
      userId,
      name,
      description: description || '',
      systemPrompt,
      icon: icon || 'user-astronaut',
      color: color || 'bg-gradient-to-r from-[#8153ff] to-[#93dc24]',
      tags: Array.isArray(tags) ? tags : [],
      category: category || 'custom',
      isCustom: true
    };
    
    // 保存智能体
    const result = await saveUserAgent(agent);
    
    if (result && result.success) {
      res.status(201).json({
        message: '创建智能体成功',
        data: result.agent || agent
      });
    } else {
      res.status(500).json({ message: '创建智能体失败' });
    }
  } catch (error) {
    console.error('创建智能体失败:', error);
    res.status(500).json({ message: '服务器错误，请稍后再试' });
  }
};

// 更新自定义智能体
const updateAgent = async (req, res) => {
  try {
    const userId = req.user.id; // 从认证中间件中获取
    const { id } = req.params;
    const { name, description, systemPrompt, icon, color, tags, category } = req.body;
    
    if (!id || !name || !systemPrompt) {
      return res.status(400).json({ message: '智能体ID、名称和提示语不能为空' });
    }
    
    // 准备更新数据
    const agent = {
      id,
      userId,
      name,
      description: description || '',
      systemPrompt,
      icon: icon || 'user-astronaut',
      color: color || 'bg-gradient-to-r from-[#8153ff] to-[#93dc24]',
      tags: Array.isArray(tags) ? tags : [],
      category: category || 'custom'
    };
    
    // 更新智能体
    const result = await updateUserAgent(agent);
    
    if (result && result.success) {
      res.json({
        message: '更新智能体成功',
        data: result.agent || agent
      });
    } else {
      res.status(404).json({ message: '智能体不存在或不属于当前用户' });
    }
  } catch (error) {
    console.error('更新智能体失败:', error);
    res.status(500).json({ message: '服务器错误，请稍后再试' });
  }
};

// 删除自定义智能体
const deleteAgent = async (req, res) => {
  try {
    const userId = req.user.id; // 从认证中间件中获取
    const { id } = req.params;
    
    if (!id) {
      return res.status(400).json({ message: '智能体ID不能为空' });
    }
    
    // 删除智能体
    const success = await deleteUserAgent(id, userId);
    
    if (success) {
      res.json({ message: '删除智能体成功' });
    } else {
      res.status(404).json({ message: '智能体不存在或不属于当前用户' });
    }
  } catch (error) {
    console.error('删除智能体失败:', error);
    res.status(500).json({ message: '服务器错误，请稍后再试' });
  }
};

// 获取用户收藏的智能体ID列表
const getFavoriteAgents = async (req, res) => {
  try {
    const userId = req.user.id; // 从认证中间件中获取
    
    const favoriteIds = await getUserFavoriteAgentIds(userId);
    
    res.json({
      message: '获取收藏智能体成功',
      data: favoriteIds
    });
  } catch (error) {
    console.error('获取收藏智能体失败:', error);
    res.status(500).json({ message: '服务器错误，请稍后再试' });
  }
};

// 添加智能体到收藏
const addToFavorites = async (req, res) => {
  try {
    const userId = req.user.id; // 从认证中间件中获取
    const { agentId } = req.body;
    
    if (!agentId) {
      return res.status(400).json({ message: '智能体ID不能为空' });
    }
    
    const success = await addAgentToFavorites(userId, agentId);
    
    if (success) {
      res.json({ 
        message: '添加到收藏成功',
        data: { agentId, isFavorite: true }
      });
    } else {
      res.status(500).json({ message: '添加到收藏失败' });
    }
  } catch (error) {
    console.error('添加到收藏失败:', error);
    res.status(500).json({ message: '服务器错误，请稍后再试' });
  }
};

// 从收藏中移除智能体
const removeFromFavorites = async (req, res) => {
  try {
    const userId = req.user.id; // 从认证中间件中获取
    const { agentId } = req.params;
    
    if (!agentId) {
      return res.status(400).json({ message: '智能体ID不能为空' });
    }
    
    const success = await removeAgentFromFavorites(userId, agentId);
    
    // 即使没有找到记录也返回成功，因为最终结果是该智能体不在收藏中
    // 这样前端不会收到404错误
    res.json({ 
      message: '从收藏中移除成功',
      data: { agentId, isFavorite: false }
    });
  } catch (error) {
    console.error('从收藏中移除失败:', error);
    res.status(500).json({ message: '服务器错误，请稍后再试' });
  }
};

// 切换智能体收藏状态（特别是用于预设智能体）
const toggleFavoriteStatus = async (req, res) => {
  try {
    const userId = req.user.id;
    console.log('收到请求体:', req.body);
    
    // 确保请求体中有agentId
    if (!req.body || !req.body.agentId) {
      console.error('请求体缺少agentId', req.body);
      return res.status(400).json({ message: '智能体ID不能为空' });
    }
    
    const { agentId, isFavorite } = req.body;
    console.log('处理收藏请求:', { userId, agentId, isFavorite });
    
    // 根据isFavorite决定添加或移除收藏
    let success = false;
    
    if (isFavorite === false) {
      console.log('执行移除收藏操作');
      success = await removeAgentFromFavorites(userId, agentId);
      res.json({ 
        message: '从收藏中移除成功',
        data: { agentId, isFavorite: false }
      });
    } else {
      console.log('执行添加收藏操作');
      success = await addAgentToFavorites(userId, agentId);
      res.json({ 
        message: '添加到收藏成功',
        data: { agentId, isFavorite: true }
      });
    }
  } catch (error) {
    console.error('切换收藏状态失败:', error);
    res.status(500).json({ message: '服务器错误，请稍后再试' });
  }
};

export {
  getUserAgentList,
  createUserAgent,
  updateAgent,
  deleteAgent,
  getFavoriteAgents,
  addToFavorites,
  removeFromFavorites,
  toggleFavoriteStatus
}; 